package util

import (
	"encoding/json"
	"fmt"
	jsoniter "github.com/json-iterator/go"
)

func BytesToJsonMap(body []byte) interface{} {
	json := BytesToJson(body)

	//正在尝试将 interface{} 类型的变量转换为 map[string]interface{} 类型，这是一个类型断言（type assertion），并不是强制类型转换。
	// 若类型断言将会失败，导致运行时 panic
	jsonMap, ok := json.(map[string]interface{})
	if ok {
		println("已成功将当前 JSON 转换为 Map（map[string]interface{} 类型）")
	} else {
		println(fmt.Errorf("当前 JSON 无法转换为 Map（不是 map[string]interface{} 类型）"))
	}
	return jsonMap
}

func BytesToJsonArray(body []byte) interface{} {
	json := BytesToJson(body)

	//正在尝试将 interface{} 类型的变量转换为 map[string]interface{} 类型，这是一个类型断言（type assertion），并不是强制类型转换。
	// 若类型断言将会失败，导致运行时 panic
	jsonMap, ok := json.([]interface{})
	if ok {
		println("已成功将当前 JSON 转换为 Array（[]interface{} 类型）")
	} else {
		println(fmt.Errorf("当前 JSON 无法转换为 Array（不是 []interface{} 类型）"))
	}
	return jsonMap
}

func BytesToJson(body []byte) interface{} {
	// 构造接收体
	var data interface{}
	return JsonBytesToStruct(body, &data)
}

func JsonBytesToStruct(body []byte, data interface{}) interface{} {
	// 解析 JSON 数据
	//var data interface{}
	err := json.Unmarshal(body, &data)
	if err != nil {
		fmt.Println("Error unmarshalling JSON:", err)
		return nil
	}
	return data
}

func ToJsonString(jsonObj interface{}) string {
	jsonStr, _ := jsoniter.MarshalToString(jsonObj)
	return jsonStr
}
